<?php

//临时记录信息
function R($c){
	file_put_contents('./recover',$c);
}


/*
	### 用于在PHP页面处理token和提示
*/
function _backBeForeOrAlert($token1='',$alert){
	if(!$token1){
		echo "<script>sessionStorage.alert='".$alert."';history.go(-1);</script>";exit;
	}else{
		echo "<script>sessionStorage.token1='".$token1."';sessionStorage.alert='".$alert."';history.go(-1);</script>";exit;
	}
}




//记录错误日志信息
function ErrorLog($info){
	if(!$info){
		return;
	}
	$file = '../error_log';
	if(file_exists($file)){
		$res = S($file);
		$res2 = $info.'   ---   '.date('Y-m-d H:m:s')."\r\n".$res;
	}else{
		$res2 = $info.'---'.date('Y-m-d H:m:s');
	}
	S($file,$res2);
}






/*
	### 使用用户名,ip,时间戳组合成token1并返回
	参一：用户名或openid
	参二：前后台类型，默认false后台，true 为前台
	return: 返回生成的token1
*/
function SetToken1($user,$type=false){
	$ip = @$_SERVER["REMOTE_ADDR"];
	$token1 = md5($user.$ip.microtime());
	if($type){
		//S('token/before/'.$user,$token1);
		$_SESSION['tokenbefore'.$user] = $token1;
	}else{
		//S('token/after/'.$user,$token1);
		$_SESSION['tokenafter'.$user] = $token1;
	}
	return $token1;
}


/*
	### 验证token1
	参一：用户名或openid
	参二：要验证的token1
	参三：前后台类型，默认false后台，true 为前台
	return: 返回生成的token1
*/
function VerifyToken1($user,$token1,$type=false){
	if($type){
		//$token2 = S('token/before/'.$user);
		$token2 = $_SESSION['tokenbefore'.$user];
	}else{
		//$token2 = S('token/after/'.$user);
		$token2 = $_SESSION['tokenafter'.$user];
	}
	if($token2 == $token1){
		return true;	//验证成功返回新的token1
	}else{
		return false;
	}
}










//打印信息
function dump($data,$stat=false){
	echo '<pre>';
		var_dump($data);
	echo '</pre>';
	if($stat){
		exit;
	}
}









/*
	### 接收POST,GET,REQUEST数据，并处理特殊字符
	参一：接收名
	参二：默认空为get方式，get|post|all (request)
	return：返回将特殊字符处理后的数据
	示例：
		$number = I('number','post');
*/
function I($name,$type=''){
	switch($type){
		case 'p':$val = @$_POST[$name];break;
		case 'g':$val = @$_GET[$name];break;
		default:$val = @$_REQUEST[$name];break;
	}
	return trim($val);
}







/*
	### 永久缓存数据
	参一：缓存路径 (string)
	参二：缓存的值（string）
	return：
		当只有参一时是获取缓存并返回空或对应的值
		当有两个参数时是设置缓存，无返回值
	示例：
		S('a','aaa');	//设置
		echo S('a');	//获取
*/
function S($p,$v=false){
	if($v === ''){
		if(is_file($p)){
			unlink($p);
		}
		return;
	}
	if($v !== false){
		if(!is_dir(dirname($p))){
			Mkdirs(dirname($p));
		}
		file_put_contents($p,$v);
	}else{
		if(!file_exists($p)){
			return;
		}
		return file_get_contents($p);
	}
}






/*
	### 递归创建目录
	### 参一：目录路径
*/
function Mkdirs($p){
	if(!is_dir($p)){
		Mkdirs(dirname($p),0777,true);
		mkdir($p);
	}
}




//递归删除目录及文件
function DelDirs($p){
	if(is_file($p)){
		unlink($p);
	}
	if(is_dir($p)){
		$op = opendir($p);
		while($rd = readdir($op)){
			if($rd == '.' || $rd == '..'){
				continue;
			}
			$p2 = $p.'/'.$rd;
			DelDirs($p2);
		}
		rmdir($p);
		closedir($op);
	}
}







/*
	### 检测变量
	示例：
		_checkVal($name,$pwd,,,);
*/
function _checkVal(){
	global $tmp_arr;
	$args = func_get_args();
	$stat = true;
	foreach($args as $k => $v){
		if(!$v){
			$tmp_arr['stat'] = 'err1';
			exit(json_encode($tmp_arr));
		}
	}
}



/*
	### 检测是否有非法字符 / \ < > ' " !
		有非法字符返回false
		正常返回true
	$type  是否忽略检测空格，默认false 检测 空格 
*/
function _checkChar($v,$type=false){
	if($type){
		$p = '/\\\|\/|\<|\>|\'|\"|\!/';
	}else{
		$p = '/\s|\\\|\/|\<|\>|\'|\"|\!/';
	}
	if(preg_match($p,$v)){
		return false;
	}
	return true;
}
